package com.kime.email.book;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.io.FileOutputStream;
import java.util.Date;
import java.util.Properties;

/**
 * Java 邮件开发详解
 * 创建一封包含内嵌图片的复杂邮件
 */
public class PictureMessage {
    public static void main(String[] args) throws Exception {
        String from = "kimewen@163.com";
        String to   = "kimewen@qq.com";
        String subject = "HTML 邮件";
        String body = "<h4>欢迎大家阅读此邮件</h4>" +
                "<a href='https://www.baidu.com'>访问百度</a></br>" +
                "<img src=\"https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png\"><br/>" +
                "<p>这是一张图片</p>" +
                "<img src=\"cid:logo_oppo\"";

        // 创建 Session 实例对象
        Session session = Session.getDefaultInstance(new Properties());
        // 创建 MimeMessage 实例对象
        MimeMessage mimeMessage = new MimeMessage(session);
        // 设置发件人
        mimeMessage.setFrom(new InternetAddress(from));
        // 设置收件人
        mimeMessage.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
        // 设置发送日期
        mimeMessage.setSentDate(new Date());
        // 设置邮件主题
        mimeMessage.setSubject(subject);

        // 创建一个子类型为“related”的 MimeMultipart 对象
        MimeMultipart mimeMultipart = new MimeMultipart("related");
        // 创建一个表示 HTML 正文的 MimeBodyPart 对象，并将它加入到前面创建的 MimeMultipart 对象中
        MimeBodyPart htmlBodyPart =new MimeBodyPart();
        htmlBodyPart.setContent(body, "text/html;charset=gb2312");
        mimeMultipart.addBodyPart(htmlBodyPart);

        // 创建一个表示图片内容的 MimeBodyPart 对象，并将它加入到前面创建的 MimeMultipart 对象中
        MimeBodyPart pictureBodyPart = new MimeBodyPart();
        FileDataSource fileDataSource = new FileDataSource("D:\\workspace\\email-demo\\src\\main\\resources\\image\\oppo.png");
        pictureBodyPart.setDataHandler(new DataHandler(fileDataSource));
        pictureBodyPart.setFileName(fileDataSource.getName());
        pictureBodyPart.setContentID("logo_oppo");
        // 同
        // pictureBodyPart.setHeader("Content-ID", "logo_oppo");
        // DataSource 对象已经设置了 Content-Type，所以不必再次设置
        // pictureBodyPart.setHeader("Content-Type", "image/gif");
        mimeMultipart.addBodyPart(pictureBodyPart);

        // 将 mimeMultipart 对象设置为整个邮件的内容，要注意调用 saveChanges 方法进行更新
        mimeMessage.setContent(mimeMultipart);
        // 保存并生成最终的邮件内容
        mimeMessage.saveChanges();
        // 把 mimeMessage 对象中的内容写入到文件中
        mimeMessage.writeTo(new FileOutputStream("D:\\workspace\\email-demo\\src\\main\\resources\\eml\\pictureMessage.eml"));
    }
}
